/**
 * 页面导航与顶栏管理组合式函数
 * 提供页面返回、首页跳转和顶部导航栏信息更新功能
 */
import { ref } from 'vue'

/**
 * 页面导航与顶栏管理
 * @param {Object} instance - 组件实例，通常是 getCurrentInstance() 的结果
 * @returns {Object} 返回导航和顶栏管理相关的方法和状态
 */
export function usePageNavigation(instance) {
  const proxy = instance?.proxy

  // 导航栏高度
  const customBarHeight = ref(proxy?.$tn?.vuex('vuex_custom_bar_height') || 0)
  const statusBarHeight = ref(proxy?.$tn?.vuex('vuex_status_bar_height') || 0)

  /**
   * 返回上一页或首页
   * 通过判断当前页面的页面栈信息，决定是返回上一页还是跳转到首页
   */
  const goBack = () => {
    const pages = getCurrentPages()
    if (pages && pages.length > 0) {
      const firstPage = pages[0]
      if (pages.length == 1 && (!firstPage.route || firstPage.route != '/pages/index/index')) {
        uni.reLaunch({
          url: '/pages/index/index'
        })
      } else {
        uni.navigateBack({
          delta: 1
        })
      }
    } else {
      uni.reLaunch({
        url: '/pages/index/index'
      })
    }
  }
  
  /**
   * 跳转到首页
   */
  const goHome = () => {
    uni.reLaunch({
      url: '/pages/index/index'
    })
  }
  
  /**
   * 更新顶部导航栏信息
   * 获取并更新导航栏高度信息
   */
  let _retryCount = 0
  const updateCustomBarInfo = async () => {
    if (!proxy?.$tn) return { customBarHeight: 0, statusBarHeight: 0 }
    
    // 如果已经有高度，直接使用
    if (customBarHeight.value > 0) {
      return { 
        customBarHeight: customBarHeight.value, 
        statusBarHeight: statusBarHeight.value 
      }
    }
    
    // 否则尝试获取
    try {
      const navBarInfo = await proxy.$tn.updateCustomBar()
      customBarHeight.value = navBarInfo.customBarHeight
      statusBarHeight.value = navBarInfo.statusBarHeight
      
      // 更新 vuex 中的值
      proxy.$tn.vuex('vuex_status_bar_height', statusBarHeight.value)
      proxy.$tn.vuex('vuex_custom_bar_height', customBarHeight.value)
      
      // 重置重试计数
      _retryCount = 0
      
      return { 
        customBarHeight: customBarHeight.value, 
        statusBarHeight: statusBarHeight.value 
      }
    } catch (e) {
      console.error('获取导航栏信息失败:', e)
      // 避免无限循环，最多重试3次
      if (_retryCount < 3) {
        _retryCount++
        return new Promise(resolve => {
          setTimeout(async () => {
            const result = await updateCustomBarInfo()
            resolve(result)
          }, 300)
        })
      }
      return { customBarHeight: 0, statusBarHeight: 0 }
    }
  }
  
  // 返回所有方法和状态
  return {
    customBarHeight,
    statusBarHeight,
    goBack,
    goHome,
    updateCustomBarInfo
  }
} 